#include "pin.h"


struct Pin
{
    uint8_t pin_number;
    GPIO_TypeDef *GPIOx;
    uint16_t Pinx;
    uint32_t RCCx;
};

static struct Pin pins[] =
{
    {0,GPIOC,GPIO_Pin_5,RCC_APB2Periph_GPIOC},
    {1,GPIOA,GPIO_Pin_15,RCC_APB2Periph_GPIOA},
    {2,GPIOA,GPIO_Pin_0,RCC_APB2Periph_GPIOA},
    {3,GPIOA,GPIO_Pin_8,RCC_APB2Periph_GPIOA},
    {4,GPIOD,GPIO_Pin_2,RCC_APB2Periph_GPIOA}
};



/**
 *@brief 引脚初始化
 *@param pin 引脚号
 *@param mode 引脚模式
 *@retval None
 */
void pin_set(PIN_T pin,PIN_MODE mode)
{
    GPIO_InitTypeDef GPIO_InitStructure;
    
    RCC_APB2PeriphClockCmd(pins[pin].RCCx,ENABLE);
    
#if USING_JTAGDisable
    GPIO_PinRemapConfig(GPIO_Remap_SWJ_JTAGDisable, ENABLE);
#endif /*USING_JTAGDisable*/
 
	GPIO_InitStructure.GPIO_Pin  = pins[pin].Pinx;
	GPIO_InitStructure.GPIO_Mode = mode; 
    GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;
 	GPIO_Init(pins[pin].GPIOx, &GPIO_InitStructure);
}



/**
 *@brief 写引脚
 *@param pin 引脚号
 *@param val 引脚值
 *@retval None
 */
void pin_put(PIN_T pin,PIN_VAL val)
{
    GPIO_WriteBit(pins[pin].GPIOx,pins[pin].Pinx,val);
}





/**
 *@brief 读引脚
 *@param pin 引脚号
 *@retval None
 */
PIN_VAL pin_get(PIN_T pin)
{
    return (PIN_VAL)GPIO_ReadInputDataBit(pins[pin].GPIOx,pins[pin].Pinx);
}


